package com.sss.action;

import com.sss.bean.AdminInfoBean;
import com.sss.service.IAdminInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import java.util.List;

/**
 * 使用@Controller注解，使得SpringMVC框架能够扫描该类作为Control层
 */
@Controller
public class AdminInfoAction {

    /*
 使用注解获取Mybatis框架的Mapper接口的实现类的实例对象
 此处使用了spring框架的IOC和DI
 也使用了面向接口的编程软件原则
 */
    @Autowired  // 此处pring进行依赖注入时，使用的是按类型进行依赖注入
            IAdminInfoService adminInfoService;

    @RequestMapping("adminInfoQueryingAction")
    public ModelAndView doQueryAdminInfoByParams(AdminInfoBean adminInfoBean){
        // 默认返回的ModelAndView对象
        ModelAndView mav = new ModelAndView();
        // 设置缓存，类似于使用session、request缓存对象
        // 设置跳转页面路径地址
        // 挑战到查询页面进行结果显示
        mav.setViewName("userInfo/UserInfoQuery");
        // 打印查询参数实体类
        System.out.println("查询参数："+adminInfoBean.toString());
        // 调用service方法进行查询业务逻辑处理
        List<AdminInfoBean> lstAdminInfos = adminInfoService.selectAdminInfoByParams(adminInfoBean);
        // 将查询结果缓存到ModelAndView对象
        mav.addObject("lstQueryUserInfos",lstAdminInfos);
        return mav;
    }


    /**
     * 登录请求的响应处理
     *
     * @param adminInfoBean 接收表单数据的实体类参数
     * @return 跳转的视图名
     */
    @RequestMapping("/doLogin")
    public String doLogin(AdminInfoBean adminInfoBean) {
        System.out.println("当前登录用户:" + adminInfoBean.toString());
        // 调用Service进行业务逻辑处理
        List<AdminInfoBean> lstAdminInfos = adminInfoService.queryLoginInfo(adminInfoBean);

        if (lstAdminInfos != null && lstAdminInfos.size() > 0) {
            // 使用重定向或者转发跳转到登录成功页面
            // 缓存登录成功之后的信息

            // 转发到登录成功页面
            // 原始的跳转路径名为：WEB-INF/pages/logined.jsp
            // 因为SpringMVC配置了视图解析器的前缀和后缀，所有只需要返回结果页路径的前缀和后缀之后，剩余的内容
            return "logined";
            // 使用重定向:重定向不能直接访问web项目的WEB-INF目录
            // response.sendRedirect("WEB-INF/logined.jsp");
            /*
             * web项目的WEB-INF目录是站点安全目录；只能通过转发才能访问其中的资源文件；
             */
        } else {
            // 重定向到登录页面继续登录，因为登录页面没有在web-info目录下，所有使用重定向和转发都可以访问
            return "../../index";
        }


    }

    /**
     * 登录请求的响应处理
     *
     * @param adminInfoBean 接收表单数据的实体类参数
     * @return 跳转的视图名
     */
    @RequestMapping("/doLogin2")
    public ModelAndView doLogin2(AdminInfoBean adminInfoBean) {

        // 默认返回的ModelAndView对象
        ModelAndView mav = new ModelAndView();
        // 设置缓存，类似于使用session、request缓存对象
        // 设置跳转页面路径地址
        // 默认跳转地址：登录失败之后的重新进入登录页面
        mav.setViewName("../../index");

        System.out.println("当前登录用户:" + adminInfoBean.toString());
        // 调用Service进行业务逻辑处理
        List<AdminInfoBean> lstAdminInfos = adminInfoService.queryLoginInfo(adminInfoBean);

        if (lstAdminInfos != null && lstAdminInfos.size() > 0) {
            // 使用重定向或者转发跳转到登录成功页面
            // 缓存登录成功之后的信息

            // ModelAndView数据缓存级别是Request级别
            mav.addObject("loginUserInfoB", lstAdminInfos.get(0));
            // 转发到登录成功页面
            mav.setViewName("logined");
        }
        // 返回值
        return mav;
    }


}
